
// 笔试题:
// 用正则表达式替换 字符串模版字面量 中的 ${variable}

const user = {
    name: '拆二代',
    hometown: '抚州',
    age: 21
}

// const template = `大家好，我是${user.name}，我来自${user.hometown}，今年${user.age}岁` ;
// console.log( template );

const template = '大家好，我是${user.name}，我来自${user.hometown}，今年${user.age}岁' ;

// 第一步: 将 $ 、{ 、} 转义
// 第二步: 使用字符集将 `.` 包含起来，从而让 `.` 表示它本身而不是通配符
// 第三步: 使用字符集将 小写英文字母 包含起来 (我们期望变量名都是小写英文字母组成的)
const regexp = /\$\{[a-z]+[.]+[a-z]+\}/;

const re = /[a-z]+[.]+[a-z]+/;

let str = template;
let result ;
// 用 regexp 对 str 执行一个搜索匹配并将结果保存到 result 变量中
while( result = regexp.exec( str ) ){ // 若 result 是数组而不是 null 则会进入循环
    const metched = result[ 0 ] ; // 从结果中获取匹配到的字符串
    let res = re.exec( metched );
    const ex = res[ 0 ];
    // 使用 全局函数 eval 求指定表达式的值
    const value = eval( ex ) ; // 注意尽量不要使用 eval 函数
    console.log( ex , value );
    // 用 value 的值 替换 str 中 metched 对应的内容
    str = str.replace( metched , value ); 
    console.log( str );
}